CREATE OR REPLACE
package body usage_gui as


PROCEDURE renderSessionUsage IS
bc_index package_gui_statics.arrayVarcharVarchar;
sidebarLinks package_gui_statics.arrayVarcharVarchar;
tempSession VARCHAR2(255);
BEGIN 

  bc_index('1Home') := 'http://www.google.it';
  bc_index('2Section 1') := 'http://www.google.com';
  bc_index('3SubSection 2') := '';
  
  sidebarLinks('Create Object') := 'http://www.exmaple.it/obj/create';
  sidebarLinks('List Object') := 'http://www.exmaple.it/obj/list';
  sidebarLinks('Update Object') := 'http://www.exmaple.it/obj/update';
  sidebarLinks('Delete Object') := 'http://www.exmaple.it/obj/delete';

  package_gui.renderHead ('PL/SQL FAI SCHIFO!');
  package_gui.openPageBody( bc_index );
  package_gui.openPageContainer;
  package_gui.openContent;
  
  -- Render CONTENT
  htp.print('<h1>Session procedures usage</h1>');
  
  -- Inizializzo la sessione
  package_gui.newSession;
  
  -- Inserisco il nome utente nella sessione 
  package_gui.setSessionInformation( 'user_nickname', 'StErMi' );
  
  -- Inserisco un'altra informazione nella sessione come l'userID 
  package_gui.setSessionInformation( 'user_id', '344' );
  
  -- Printo la sessione per mostrarla 
  htp.print('La sessione attuale � rappresentata come: ' || package_gui.getSession || '<br/>' );
  
  -- Printo solo l'utente della sessione 
  htp.print('Accedo alla chiave di sessione user_nickname: ' || package_gui.getSessionInformation('user_nickname') || '<br/>' );
  
  -- Cosa succede quando si cerca di accedere a qualcosa che non esiste?
  htp.print('Accedo alla chiave di sessione informazione_non_presente_in_sessione (non presente, restituisco stringa vuota): ' || package_gui.getSessionInformation('informazione_non_presente_in_sessione') || '<br/>' );
  
  --salvo sessione, la cancello e la risetto (si ricrea le chiavi)
  htp.print('<br/><br/>salvo sessione, la cancello e la risetto (si ricrea le chiavi)..... <br/>');
  tempSession := package_gui.getSession;
  package_gui.newSession;
  package_gui.setSession(tempSession);
  htp.print('Accedo alla chiave di sessione user_nickname: ' || package_gui.getSessionInformation('user_nickname') || '<br/>' );
  
  package_gui.closeContent;
  package_gui.openSidebar;
  package_gui.renderUserMenu;
  package_gui.renderOperationsMenu( sidebarLinks );
  package_gui.closeSidebar;
  package_gui.closePageBody;
  package_gui.renderFooter;

END renderSessionUsage;

PROCEDURE renderViewDetail IS
bc_index package_gui_statics.arrayVarcharVarchar;
sidebarLinks package_gui_statics.arrayVarcharVarchar;
BEGIN 

  bc_index('Home') := 'http://www.google.it';
  bc_index('Section 1') := 'http://www.google.com';
  bc_index('SubSection 2') := '';
  
  sidebarLinks('Create Object') := 'http://www.exmaple.it/obj/create';
  sidebarLinks('List Object') := 'http://www.exmaple.it/obj/list';
  sidebarLinks('Update Object') := 'http://www.exmaple.it/obj/update';
  sidebarLinks('Delete Object') := 'http://www.exmaple.it/obj/delete';

  package_gui.renderHead ('PL/SQL FAI SCHIFO!');
  package_gui.openPageBody( bc_index );
  package_gui.openPageContainer;
  package_gui.openContent;
  
  -- Render CONTENT
  htp.print('<h1>View User Emanuele</h1>');
  
  package_gui.openViewTable;
  package_gui.renderViewTableRow('Nome', 'Emanuele', 'odd');
  package_gui.renderViewTableRow('Cognome', 'Ricci', 'even');
  package_gui.renderViewTableRow('Sesso', 'Maschio', 'odd');
  package_gui.renderViewTableRow('Anno di Nascita', '1987', 'even');
  package_gui.closeViewTable;
  
  
  
  package_gui.closeContent;
  package_gui.openSidebar;
  package_gui.renderUserMenu;
  package_gui.renderOperationsMenu( sidebarLinks );
  package_gui.closeSidebar;
  package_gui.closePageBody;
  package_gui.renderFooter;

END renderViewDetail;

/*
FUNCTION roundToLower(
  num NUMBER
) RETURN NUMBER IS
tempNum NUMBER;
BEGIN
  tempNum := round(num);
  IF 
  return tempNum;
END;
*/

PROCEDURE renderManage (
  page BINARY_INTEGER DEFAULT 1,
  page2 BINARY_INTEGER DEFAULT 1,
  param1 VARCHAR2 DEFAULT '',
  param2 VARCHAR2 DEFAULT '',
  param3 VARCHAR2 DEFAULT '',
  param4 VARCHAR2 DEFAULT '',
  param5 VARCHAR2 DEFAULT '',
  param6 VARCHAR2 DEFAULT ''
) IS
bc_index package_gui_statics.arrayVarcharVarchar;
sidebarLinks package_gui_statics.arrayVarcharVarchar;
columnNames package_gui_statics.arrayIntVarchar;

baseOffset BINARY_INTEGER := 1;
recordPerPage BINARY_INTEGER := 2;
countRecord NUMBER := 0;
BEGIN 

  bc_index('Home') := 'http://www.google.it';
  bc_index('Section 1') := 'http://www.google.com';
  bc_index('SubSection 2') := '';
  
  sidebarLinks('Create Object') := 'http://www.exmaple.it/obj/create';
  sidebarLinks('List Object') := 'http://www.exmaple.it/obj/list';
  sidebarLinks('Update Object') := 'http://www.exmaple.it/obj/update';
  sidebarLinks('Delete Object') := 'http://www.exmaple.it/obj/delete';
  
  columnNames(1) := 'Nome';
  columnNames(2) := 'Cognome';
  columnNames(3) := 'Anno Nascita';

  package_gui.renderHead ('PL/SQL FAI SCHIFO!');
  package_gui.openPageBody( bc_index );
  package_gui.openPageContainer;
  package_gui.openContent;
  
  /** Render CONTENT */
  htp.print('<h1>Manage Objects</h1>');
  
  /* 
  
  Vi prego fortemente di studiare il codice e capirlo perche' questo e' un esempio reale e funzionante di come
  utilizzare questa widget. 
  
  Principalmente abbiamo bisogno di queste informazioni
  
  baseOffset -> da quale record iniziare a selezionare
  countRecord -> per sapere quanti record totali ha la tabella o la selezione che ne facciamo
                  NB: vengono usati piu che altro per stampare informazioni utili all'utente che vede la widget
  columnNames -> Il nome delle colonne delle informazioni da stampare
  
  Come funziona la cosa? 
  Noi stampiamo di volta in volta un numero limitato di record. 
  Ad esempio partiamo dai primi due record (attuale esempio) e suddividiamo la lista di tutti i record in pagine (di due record)
  Visualizziamo i due record nella nostra tabella e poi proponiamo una serie di bottoni che permetano all'utente di spostarsi lungo
  le pagine.
  Il codice sottostante fa proprio quello. La select e' un po' complicata per il semplice fatto che oracle non ha, 
  come ce l'ha mysql nella sintassi della select la parte LIMIT DA_DOVE_PARTIRE, QUANTI_RECORD_SELEZIONARE
  Per questo motivo e' necessario fare due record annidiate. Questo, vi assicuro, e' il metodo standard di fare le cose.
  Vi prego di prenderlo come una verita' obiettiva e di usare questo esempio adattandola alla tabella e ai dati che dovete mostrare
  
  */
  
  SELECT COUNT(1) INTO countRecord FROM persone;
  baseOffset := ((page-1)*recordPerPage)+1; /* deve partire da 1 se pag e' 1 */
  package_gui.openManageTable( 'manage-form', 'param1=3&param2=ciaociao&param3=221', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', baseOffset, ((baseOffset+recordPerPage)-1), countRecord, columnNames);  
  FOR person IN
    (SELECT * FROM (
      SELECT ROWNUM as rNum, nome, cognome, annonascita, id_utente FROM persone
    )
    WHERE rNum BETWEEN baseOffset AND ((baseOffset+recordPerPage)-1)
    ORDER BY nome ASC
    )
  LOOP
    package_gui.openManageTableRow( person.id_utente);
    package_gui.renderManageTableRow(person.nome);
    package_gui.renderManageTableRow(person.cognome);
    package_gui.renderManageTableRow(person.annonascita);
    package_gui.closeManageTableRow('http://www.exmaple.it/obj/view', 'http://www.exmaple.it/obj/update', 'http://www.exmaple.it/obj/delete');  
  END LOOP;
  package_gui.closeManageTable( 'manage-form', 'param4=4&param5=comestaicaro&param6=112333', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', page, round(countRecord/recordPerPage) );
  
  htp.print('<br/><br/>');
  
  SELECT COUNT(1) INTO countRecord FROM persone;
  baseOffset := ((page2-1)*recordPerPage)+1; /* deve partire da 1 se pag e' 1 */
  package_gui.openManageTable( 'manage-form2', 'param1=3&param2=ciaociao&param3=221', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', baseOffset, ((baseOffset+recordPerPage)-1), countRecord, columnNames);  
  FOR person IN
    (SELECT * FROM (
      SELECT ROWNUM as rNum, nome, cognome, annonascita, id_utente FROM persone
    )
    WHERE rNum BETWEEN baseOffset AND ((baseOffset+recordPerPage)-1)
    ORDER BY nome ASC
    )
  LOOP
    package_gui.openManageTableRow( person.id_utente);
    package_gui.renderManageTableRow(person.nome);
    package_gui.renderManageTableRow(person.cognome);
    package_gui.renderManageTableRow(person.annonascita);
    package_gui.closeManageTableRow('http://www.exmaple.it/obj/view', 'http://www.exmaple.it/obj/update', 'http://www.exmaple.it/obj/delete');  
  END LOOP;
  package_gui.closeManageTable( 'manage-form2', 'param4=4&param5=comestaicaro&param6=112333', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', page2, round(countRecord/recordPerPage), 'page2' );
  
  package_gui.closeContent;
  package_gui.openSidebar;
  package_gui.renderUserMenu;
  package_gui.renderOperationsMenu( sidebarLinks );
  package_gui.closeSidebar;
  package_gui.closePageBody;
  package_gui.renderFooter;

END renderManage;

PROCEDURE renderManage2 (
  page BINARY_INTEGER DEFAULT 1,
  page2 BINARY_INTEGER DEFAULT 1,
  param1 VARCHAR2 DEFAULT '',
  param2 VARCHAR2 DEFAULT '',
  param3 VARCHAR2 DEFAULT '',
  param4 VARCHAR2 DEFAULT '',
  param5 VARCHAR2 DEFAULT '',
  param6 VARCHAR2 DEFAULT ''
) IS
bc_index package_gui_statics.arrayVarcharVarchar;
sidebarLinks package_gui_statics.arrayVarcharVarchar;
columnNames package_gui_statics.arrayIntVarchar;

baseOffset BINARY_INTEGER := 1;
recordPerPage BINARY_INTEGER := 2;
countRecord NUMBER := 0;
BEGIN 

  bc_index('Home') := 'http://www.google.it';
  bc_index('Section 1') := 'http://www.google.com';
  bc_index('SubSection 2') := '';
  
  sidebarLinks('Create Object') := 'http://www.exmaple.it/obj/create';
  sidebarLinks('List Object') := 'http://www.exmaple.it/obj/list';
  sidebarLinks('Update Object') := 'http://www.exmaple.it/obj/update';
  sidebarLinks('Delete Object') := 'http://www.exmaple.it/obj/delete';
  
  columnNames(1) := 'Nome';
  columnNames(2) := 'Cognome';
  columnNames(3) := 'Anno Nascita';

  package_gui.renderHead ('PL/SQL FAI SCHIFO!');
  package_gui.openPageBody( bc_index );
  package_gui.openPageContainer;
  package_gui.openContent;
  
  /** Render CONTENT */
  htp.print('<h1>Manage Objects</h1>');
  
  /* 
  
  Vi prego fortemente di studiare il codice e capirlo perche' questo e' un esempio reale e funzionante di come
  utilizzare questa widget. 
  
  Principalmente abbiamo bisogno di queste informazioni
  
  baseOffset -> da quale record iniziare a selezionare
  countRecord -> per sapere quanti record totali ha la tabella o la selezione che ne facciamo
                  NB: vengono usati piu che altro per stampare informazioni utili all'utente che vede la widget
  columnNames -> Il nome delle colonne delle informazioni da stampare
  
  Come funziona la cosa? 
  Noi stampiamo di volta in volta un numero limitato di record. 
  Ad esempio partiamo dai primi due record (attuale esempio) e suddividiamo la lista di tutti i record in pagine (di due record)
  Visualizziamo i due record nella nostra tabella e poi proponiamo una serie di bottoni che permetano all'utente di spostarsi lungo
  le pagine.
  Il codice sottostante fa proprio quello. La select e' un po' complicata per il semplice fatto che oracle non ha, 
  come ce l'ha mysql nella sintassi della select la parte LIMIT DA_DOVE_PARTIRE, QUANTI_RECORD_SELEZIONARE
  Per questo motivo e' necessario fare due record annidiate. Questo, vi assicuro, e' il metodo standard di fare le cose.
  Vi prego di prenderlo come una verita' obiettiva e di usare questo esempio adattandola alla tabella e ai dati che dovete mostrare
  
  */
  
  SELECT COUNT(1) INTO countRecord FROM persone;
  baseOffset := ((page-1)*recordPerPage)+1; /* deve partire da 1 se pag e' 1 */
  package_gui.openManageTable( 'manage-form', '', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', baseOffset, ((baseOffset+recordPerPage)-1), countRecord, columnNames, false, true);  
  FOR person IN
    (SELECT * FROM (
      SELECT ROWNUM as rNum, nome, cognome, annonascita, id_utente FROM persone
    )
    WHERE rNum BETWEEN baseOffset AND ((baseOffset+recordPerPage)-1)
    ORDER BY nome ASC
    )
  LOOP
    package_gui.openManageTableRow( person.id_utente, false );
    package_gui.renderManageTableRow(person.nome);
    package_gui.renderManageTableRow(person.cognome);
    package_gui.renderManageTableRow(person.annonascita);
    package_gui.closeManageTableRow('http://www.exmaple.it/obj/view', 'http://www.exmaple.it/obj/update', 'http://www.exmaple.it/obj/delete');  
  END LOOP;
  package_gui.closeManageTable( 'manage-form', '', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', page, ceil(countRecord/recordPerPage) );
  
  htp.print('<br/><br/>');
  
  SELECT COUNT(1) INTO countRecord FROM persone;
  baseOffset := ((page2-1)*recordPerPage)+1; /* deve partire da 1 se pag e' 1 */
  package_gui.openManageTable( 'manage-form2', '', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', baseOffset, ((baseOffset+recordPerPage)-1), countRecord, columnNames);  
  FOR person IN
    (SELECT * FROM (
      SELECT ROWNUM as rNum, nome, cognome, annonascita, id_utente FROM persone
    )
    WHERE rNum BETWEEN baseOffset AND ((baseOffset+recordPerPage)-1)
    ORDER BY nome ASC
    )
  LOOP
    package_gui.openManageTableRow( person.id_utente);
    package_gui.renderManageTableRow(person.nome);
    package_gui.renderManageTableRow(person.cognome);
    package_gui.renderManageTableRow(person.annonascita);
    package_gui.closeManageTableRow('http://www.exmaple.it/obj/view', 'http://www.exmaple.it/obj/update', 'http://www.exmaple.it/obj/delete');  
  END LOOP;
  package_gui.closeManageTable( 'manage-form2', '', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderManage', page2, round(countRecord/recordPerPage), 'page2' );
  
  package_gui.closeContent;
  package_gui.openSidebar;
  package_gui.renderUserMenu;
  package_gui.renderOperationsMenu( sidebarLinks );
  package_gui.closeSidebar;
  package_gui.closePageBody;
  package_gui.renderFooter;

END renderManage2;


procedure renderIndex is
bc_index package_gui_statics.arrayVarcharVarchar;
sidebarLinks package_gui_statics.arrayVarcharVarchar;
begin
  
  bc_index('Home') := 'http://www.google.it';
  bc_index('Section 1') := 'http://www.google.com';
  bc_index('SubSection 2') := '';
  
  sidebarLinks('Create Object') := 'http://www.exmaple.it/obj/create';
  sidebarLinks('List Object') := 'http://www.exmaple.it/obj/list';
  sidebarLinks('Update Object') := 'http://www.exmaple.it/obj/update';
  sidebarLinks('Delete Object') := 'http://www.exmaple.it/obj/delete';
  

  package_gui.renderHead ('PL/SQL FAI SCHIFO!');
  package_gui.openPageBody( bc_index );
  package_gui.openPageContainer;
  package_gui.openContent;
  
  /** Render CONTENT */
  htp.print('<p>Questo e un esempio di testo all interno del contentuo :)</p>');
  
  package_gui.closeContent;
  package_gui.openSidebar;
  package_gui.renderUserMenu;
  package_gui.renderOperationsMenu( sidebarLinks );
  package_gui.closeSidebar;
  package_gui.closePageBody;
  package_gui.renderFooter;
  
end renderIndex; 

procedure renderMessageError (
  private_status_error_message VARCHAR2 DEFAULT NULL
) IS
  bc_index package_gui_statics.arrayVarcharVarchar;
  sidebarLinks package_gui_statics.arrayVarcharVarchar;
begin
  
  bc_index('Home') := 'http://www.google.it';
  bc_index('Section 1') := 'http://www.google.com';
  bc_index('SubSection 2') := '';
  
  sidebarLinks('Create Object') := 'http://www.exmaple.it/obj/create';
  sidebarLinks('List Object') := 'http://www.exmaple.it/obj/list';
  sidebarLinks('Update Object') := 'http://www.exmaple.it/obj/update';
  sidebarLinks('Delete Object') := 'http://www.exmaple.it/obj/delete';
  

  package_gui.renderHead ('PL/SQL FAI SCHIFO!');
  package_gui.openPageBody( bc_index );
  package_gui.openPageContainer;
  package_gui.openContent;
  
  /** Render CONTENT */
  htp.print('<h1>Pagina di esempio di stampa di un msg di errore</h1>');
  htp.print('<p>Questo e un esempio di testo all interno del contentuo :)</p>');
  package_gui.renderErrorMessage(private_status_error_message);
  
  package_gui.closeContent;
  package_gui.openSidebar;
  package_gui.renderUserMenu;
  package_gui.renderOperationsMenu( sidebarLinks );
  package_gui.closeSidebar;
  package_gui.closePageBody;
  package_gui.renderFooter;
  
end renderMessageError; 

procedure renderForm (
  user_name VARCHAR2 DEFAULT NULL,
  user_surname VARCHAR2 DEFAULT NULL,
  user_gender VARCHAR2 DEFAULT NULL,
  user_country package_gui_statics.arrayIntVarchar DEFAULT emptyProdotto,
  submit_button_form VARCHAR2 DEFAULT NULL,
  hiddenFieldExample VARCHAR2 DEFAULT NULL,
  user_password VARCHAR2 DEFAULT NULL,
  user_asleep VARCHAR2 DEFAULT NULL,
  user_degree VARCHAR2 DEFAULT NULL,
  user_birthdate VARCHAR2 DEFAULT NULL,
  user_trip_date_from VARCHAR2 DEFAULT NULL,
  user_trip_date_to VARCHAR2 DEFAULT NULL,
  user_search_name VARCHAR2 DEFAULT NULL,
  user_search_name_hidden VARCHAR2 DEFAULT NULL,
  prodotto package_gui_statics.arrayIntVarchar DEFAULT emptyProdotto,
  distributore package_gui_statics.arrayIntVarchar DEFAULT emptyDistributori,
  orario_hour VARCHAR2 DEFAULT NULL,
  orario_minute VARCHAR2 DEFAULT NULL
) is

selectOptionsProdotto package_gui_statics.arrayVarcharVarchar;
selectOptions package_gui_statics.arrayVarcharVarchar;
selectCountryOptions package_gui_statics.arrayVarcharVarchar;
radioButtonParam package_gui_statics.arrayVarcharVarchar;
radioButtonParamChecked package_gui_statics.arrayVarcharVarchar;
bc_index package_gui_statics.arrayVarcharVarchar;
sidebarLinks package_gui_statics.arrayVarcharVarchar;
varIndex BINARY_INTEGER;
varIndexVarchar VARCHAR2(255);
validationRule package_gui_statics.ruleDefinitionType;

begin
  
  bc_index('1Home') := 'http://www.google.it';
  bc_index('2Section 1') := 'http://www.google.com';
  bc_index('3SubSection 2') := '';
  
  sidebarLinks('Create Object') := 'http://www.exmaple.it/obj/create';
  sidebarLinks('List Object') := 'http://www.exmaple.it/obj/list';
  sidebarLinks('Update Object') := 'http://www.exmaple.it/obj/update';
  sidebarLinks('Delete Object') := 'http://www.exmaple.it/obj/delete';
  
  selectOptions('m') := 'Maschio';
  selectOptions('f') := 'Femmina';
  
  selectCountryOptions('it') := 'Italia';
  selectCountryOptions('fr') := 'Francia';
  selectCountryOptions('de') := 'Germania';
  selectCountryOptions('uk') := 'Inghilterra';
  selectCountryOptions('nl') := 'Olanda';
  selectCountryOptions('es') := 'Spagna';
  selectCountryOptions('ch') := 'Svizzera';
  selectCountryOptions('br') := 'Brasile';
  selectCountryOptions('us') := 'USA';
  
  
  selectOptionsProdotto('cod_1011') := 'Kinder Bueno';
  selectOptionsProdotto('cod_1012') := 'Kinder Delice';
  selectOptionsProdotto('cod_1013') := 'Kinder Paradiso';
  selectOptionsProdotto('cod_1014') := 'Kinder Sorpresa';
  
  radioButtonParamChecked('triennale') := '';
  radioButtonParamChecked('specialistica') := 'checked';
  radioButtonParamChecked('magistrale') := '';
  radioButtonParam('triennale') := 'Triennale';
  radioButtonParam('specialistica') := 'Specialistica';
  radioButtonParam('magistrale') := 'Magistrale';
  
  package_gui.renderHead ('PL/SQL FAI SCHIFO!');
  package_gui.openPageBody( bc_index );
  package_gui.openPageContainer;
  package_gui.openContent;
  
  
  
  /** Render CONTENT */
  package_gui.openForm( 'form-esempio', 'form-esempio', 'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.renderForm', 'get' );
  
  /* TimePicker Frield */  
  package_gui.renderTimePicker(FALSE, 'Orario', 'orario', 'orario', orario_hour, orario_minute, 'Scegli tempo di consegna');
  
  /* Ajax Textfield con autocomplete, carica i dati da server */  
  package_gui.renderAjaxTextField(  TRUE,
    'http://oracle3.cli.di.unipi.it/apex/RICCI.usage_gui.ajaxRequestReceiver', TRUE,
    'Ricerca nome', 'user_search_name', 'user_search_name', user_search_name, 25, 255, 'Inserisci una keyword lunga almeno 2 caratteri!'
  );
  
  /* Dynamic TEXT Field */  
  varIndex := distributore.FIRST;
  package_gui.initDynamicFieldList;
  IF varIndex IS NOT NULL THEN
    WHILE (varIndex IS NOT NULL)
    LOOP
      package_gui.openDynamicTextFieldList('distributore', varIndex);
      package_gui.renderDynamicTextField(TRUE, 'Distributore', 'distributore', 'distributore', distributore(varIndex), 25, 255, '', varIndex, distributore  );
      package_gui.renderDynamicTextField(TRUE, '', 'testdistributore', 'testdistributore', distributore(varIndex), 25, 255, '', varIndex, distributore  );
      package_gui.renderDynamicDropDownField(TRUE, '', 'testprodotto', 'testprodotto', '', selectOptionsProdotto, varIndex, distributore  );
      package_gui.closeDynamicTextFieldList('Distributore', 'distributore', varIndex, distributore ); 
      varIndex := distributore.NEXT(varIndex);
    END LOOP;
  ELSE
    package_gui.openDynamicTextFieldList('distributore', 1);
    package_gui.renderDynamicTextField(TRUE, 'Distributore', 'distributore', 'distributore', '', 25, 255, '', 1, distributore);
    package_gui.renderDynamicTextField(TRUE, '', 'testdistributore', 'testdistributore', '', 25, 255, '', 1, distributore);
    package_gui.renderDynamicDropDownField(TRUE, '', 'testprodotto', 'testprodotto', '', selectOptionsProdotto, 1, distributore  );
    package_gui.closeDynamicTextFieldList('Distributore', 'distributore', 1, distributore);
  END IF;  
  package_gui.endDynamicFieldList('form-esempio', 'distributore');  
  
  /* Dynamic DROPDOWN Field */  
  varIndex := prodotto.FIRST;
  package_gui.initDynamicFieldList;
  IF varIndex IS NOT NULL THEN
    WHILE (varIndex IS NOT NULL)
    LOOP
      package_gui.openDynamicDropDownFieldList('prodotto', varIndex);
      package_gui.renderDynamicDropDownField( TRUE, 'Prodotto', 'prodotto', 'prodotto', prodotto(varIndex), selectOptionsProdotto, varIndex, prodotto  );
      package_gui.closeDynamicDropDownFieldList('Prodotto', 'prodotto', varIndex, prodotto ); 
      varIndex := prodotto.NEXT(varIndex);
    END LOOP;
  ELSE
    package_gui.openDynamicDropDownFieldList('prodotto', 1);
    package_gui.renderDynamicDropDownField(TRUE, 'Prodotto', 'prodotto', 'prodotto', '', selectOptionsProdotto, 1, prodotto  );
    package_gui.closeDynamicDropDownFieldList('Prodotto', 'prodotto', '', prodotto);
  END IF;  
  package_gui.endDynamicFieldList('form-esempio', 'prodotto');  
  
  /* Range Date Picker */  
  package_gui.renderRangeDatePicker( TRUE, 'Date del viaggio', 'user_trip_date', 'user_trip_date', user_trip_date_from, user_trip_date_to, 25, 255, 'Scegli la tua data di nascita' );
  
  /* Text Field */  
  package_gui.renderTextField( TRUE, 'Nome', 'user_name', 'user_name', user_name, 25, 255, 'Inserisci il tuo nome' );
  -- Adding the user_name validation
  validationRule := package_gui.initRuleDefinition(TRUE, 0, 10, NULL, 2, 5);
  package_gui.addValidationRule( 'user_name', validationRule, NULL );
  
  
  /* DropDown Field*/  
  package_gui.renderDropDown( TRUE, 'Sesso', 'user_gender', 'user_gender', user_gender, selectOptions );
  
  /* Multi DropDown Field */
  package_gui.renderMultiDropDown( FALSE, 'Nazioni', 'user_country', 'user_country', user_country, selectCountryOptions );
  
  /* Hidden Field */  
  package_gui.renderHiddenField( 'hiddenFieldExample', 'campoHidden', 'valoreCampoHidden' );
  
  /* Password Field */  
  package_gui.renderPasswordField( TRUE, 'Password', 'user_password', 'user_password', user_password, 25, 255, 'Inserisci la tua password' );

  /* Checkbox Field */   
  package_gui.renderCheckBox( FALSE, 'Sei sveglio? ', 'user_asleep', 'user_asleep', 'Si/No', 'Sei sveglio? Allora spunta la casella!', user_asleep);
  
  /* RadioButton List Field */  
  package_gui.renderRadioButtonList( TRUE, 'Laurea attuale', 'user_degree', 'user_degree', 'Scegli la laurea che attualmente stai seguendo', radioButtonParam, user_degree);
  
  /* Date Picker Field */  
  package_gui.renderDatePicker( TRUE, 'Compleanno', 'user_birthdate', 'user_birthdate', user_birthdate, 25, 255, 'Scegli la tua data di nascita' );
  
  /* Submit Button */  
  package_gui.renderSubmitButton('Crea oggetto');  
  
  package_gui.closeForm;
  
  package_gui.closeContent;
  package_gui.openSidebar;
  package_gui.renderUserMenu;
  package_gui.renderOperationsMenu( sidebarLinks );
  package_gui.closeSidebar;
  /*package_gui.closePageContainer;*/
  package_gui.closePageBody;
  
  /*Inizializzo jQuery e aggiungo tutti i controlli JS + Widgets*/
  package_gui.openjQuerySnippet;
  package_gui.closejQuerySnippet;
  
  package_gui.renderFooter;
  
end renderForm; 

PROCEDURE ajaxRequestReceiver (
  term IN VARCHAR2 DEFAULT NULL
) IS
BEGIN

htp.print('[ { "id": "Botaurus stellaris", "label": "Great Bittern", "value": "Great Bittern" }, { "id": "Ixobrychus minutus", "label": "Little Bittern", "value": "Little Bittern" }, { "id": "Ciconia ciconia", "label": "White Stork", "value": "White Stork" }, { "id": "Netta rufina", "label": "Red-crested Pochard", "value": "Red-crested Pochard" }, { "id": "Milvus milvus", "label": "Red Kite", "value": "Red Kite" }, { "id": "Porzana porzana", "label": "Spotted Crake", "value": "Spotted Crake" }, { "id": "Sterna sandvicensis", "label": "Sandwich Tern", "value": "Sandwich Tern" }, { "id": "Sterna hirundo", "label": "Common Tern", "value": "Common Tern" }, { "id": "Sterna paradisaea", "label": "Arctic Tern", "value": "Arctic Tern" }, { "id": "Sternula albifrons", "label": "Little Tern", "value": "Little Tern" }, { "id": "Chlidonias niger", "label": "Black Tern", "value": "Black Tern" }, { "id": "Galerida cristata", "label": "Crested Lark", "value": "Crested Lark" } ]');

END ajaxRequestReceiver;


end usage_gui;

